public class Test07 {
    public ListNode deleteDuplicates(ListNode head) {
        if (head == null) return null;

        // 创建哨兵节点，指向链表头部
        ListNode dummy = new ListNode(0);
        dummy.next = head;

        // prev用于追踪当前不重复的节点，cur用于遍历链表
        ListNode prev = dummy;
        ListNode cur = head;

        while (cur != null) {
            // 检查当前节点是否与下一个节点值相同
            boolean isDuplicate = false;
            while (cur.next != null && cur.val == cur.next.val) {
                isDuplicate = true;
                cur = cur.next; // 跳过重复的节点
            }

            if (isDuplicate) {
                // 如果发现重复，prev的next跳过重复的节点
                prev.next = cur.next;
            } else {
                // 如果没有重复，prev移动到cur位置
                prev = prev.next;
            }

            // cur继续向下遍历
            cur = cur.next;
        }

        return dummy.next;
    }

}
